#pragma once

#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"

using namespace std;

/*
 * 在经典汉诺塔问题中，有 3 根柱子及 N 个不同大小的穿孔圆盘，盘子可以滑入任意一根柱子。一开始，所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。

请编写程序，用栈将所有盘子从第一根柱子移到最后一根柱子。

你需要原地修改栈。

示例1:

 输入：A = [2, 1, 0], B = [], C = []
 输出：C = [2, 1, 0]
示例2:

 输入：A = [1, 0], B = [], C = []
 输出：C = [1, 0]
 * */


void move(int n, vector<int> &A, vector<int> &B, vector<int> &C) {
    if (n == 1) {
        C.insert(C.begin(), A.front());//这个得插入后面的
        A.erase(A.begin());
        return;
    }

    //将n-1个移动到B,C为借位;
    move(n - 1, A, C, B);
    //把A移动到C
    C.insert(C.begin(), A.front());
    A.erase(A.begin());
    //把B剩下的移动到C A作为help
    move(n - 1, B, A, C);

}


void hanota(vector<int> &A, vector<int> &B, vector<int> &C) {
    move(A.size(), A, B, C);

}